package org.xx.armory.service.data;

import java.util.Collection;
import java.util.Date;
import java.util.Optional;

/**
 * 字典服务提供程序。
 *
 * @author Haart
 */
public interface DictProvider {
    /**
     * 按类别添加一个字典项。
     *
     * @param categoryId
     *         类别。
     * @param item
     *         字典项。
     */
    void put(
            int categoryId,
            DictItem item
    );

    /**
     * 按类别和键获取一个字典项。
     *
     * @param categoryId
     *         类别。
     * @param key
     *         键。
     * @return 符合条件的字典项, 如果无法获取则返回{@code null}。
     */
    Optional<DictItem> get(
            int categoryId,
            String key
    );

    /**
     * 按类别获取所有字典项。
     *
     * @param categoryId
     *         类别。
     * @return 所有符合条件的字典项, 如果不存在则返回长度为{@code 0}的数组。
     */
    Collection<DictItem> getAll(int categoryId);

    /**
     * 删除字典项。
     *
     * @param categoryId
     *         类别。
     * @param key
     *         键。
     */
    void delete(
            int categoryId,
            String key
    );

    /**
     * 获取最后修改日期
     *
     * @param categoryId
     *         类别。
     * @return 指定类别的最后修改日期。
     */
    Date getLastWriteTime(int categoryId);
}
